const obj = {
  date: [1, 3, 5],
  teachers: {
    韩老师: "webpack,mp,perf",
    高老师: "react",
    夏老师: "nodejs,wechat,safe",
    罗老师: "rn",
    盛老师: "test,interview,end,project,algorithm,pattern,react-src",
    杨老师: "vue"
  },
  details: [
    {
      title: "vue01 组件化实践",
      content: `
            组件化技术大盘点
            通用组件设计思路
            element-ui体验
            实现自己的el-form
            弹框类组件实现及原理
            递归组件及应用之树形菜单
            element源码学习
            `,
      catg: "vue"
    },
    {
      title: "vue02 全家桶原理剖析",
      content: `
            vue-router需求分析
            vue-router源码实现
            vuex设计理念及需求分析
            vuex源码实现
          `,
      catg: "vue"
    },
    {
      title: "vue03 手写Vue",
      content: `
            MVVM设计理念和要素分析
            响应式原理及实现
            实现自己的vue
            vue中的数据响应式
            模板语法及编译 
            依赖收集及视图更新       
          `,
      catg: "vue"
    },
    {
      title: "vue04 vue源码剖析01",
      content: `
            开发调试环境准备
            入口文件查找
            vue初始化流程
            响应式原理
        `,
      catg: "vue"
    },
    {
      title: "vue05 vue源码剖析02",
      content: `
            异步更新策略
            虚拟DOM
            diff算法
        `,
      catg: "vue"
    },
    {
      title: "vue06 vue源码剖析03",
      content: `
            编译器原理
            常见指令工作原理
            组件机制
            事件机制
            双向绑定原理
          `,
      catg: "vue"
    },
    {
      title: "vue07 服务端渲染SSR",
      content: `
            服务端渲染原理
            vue ssr实战
            nuxt.js
            `,
      catg: "vue"
    },
    {
      title: "vue08 TypeScript实战",
      content: `
            ts核心语法
            ts+vue实战
            装饰器及其原理
            vue-property-decorator源码分析
        `,
      catg: "vue"
    },
    {
      title: "vue09 vue项目最佳实践",
      content: `
            配置策略
            权限控制
            动态路由
            动态导航菜单
            请求服务封装
            数据Mock
            请求代理
            测试                    
          `,
      catg: "vue"
    },
    {
      title: "vue10 vue3初探+响应式原理剖析",
      content: `
            调试环境搭建
            vue3
            Composition API
            响应式原理剖析
            展望
          `,
      catg: "vue"
    },
    {
      title: "休息",
      content: `
         休息
             `,

      catg: "rest"
    },
    {
      title: "React01 React组件化",
      content: `
                1.组件跨层级通信
                2.设计并实现表单控件
                3.高阶组件  
                4.实现弹窗类组件`,
      catg: "react"
    },
    {
      title: "React02 Redux、中间件的使用及源码",
      content: `
              1.使用redux
              2.使用redux中间件
              3.实现redux、中间件`,
      catg: "react"
    },
    {
      title: "React03 Hooks和react-redux使用及源码",
      content: `
              1.Hooks API
              2.react-redux使用
              3.实现react-redux
              4.react-router使用`,
      catg: "react"
    },
    {
      title: "React04 react-router使及源码",
      content: ` 
              1.react-router使用
              2.路由守卫
              3.路由hooks方法使用及实现
              4.实现Router、BrowserRouter、HashRouter、Route、Link、Switch、Redirect等`,
      catg: "react"
    },
    {
      title: "React05 企业级最佳实践01",
      content: `
              1.generator
              2.redux-saga
              3.项目搭建`,
      catg: "react"
    },
    {
      title: "React06 企业级最佳实践02",
      content: `
            1.umi+dva搭建项目
            2.路由配置
            3.按需加载
            4.umi+dva核心原理解析`,
      catg: "react"
    },
    {
      title: "React07 React原理解析01",
      content: `
              1.虚拟DOM
              2.JSX
              3.React核心API查看
              4.实现React.createElement, ReactDom.render, Component`,
      catg: "react"
    },
    {
      title: "React08 React原理解析02",
      content: `
              1.协调
              2.diff
              3.fiber结构实现初次渲染`,
      catg: "react"
    },
    {
      title: "React09 React原理解析03",
      content: `
              1.Hook原理
              2.fiber结构实现更新
              3.FunctionComponent源码解读`,
      catg: "react"
    },
    {
      title: "React10 React原理解析04",
      content: `
              1.React源码中的协调解读与实现
              2.任务调度流程
              3.合成事件
              4.setState的同步与异步
              5.常见组件优化技术总结`,
      catg: "react"
    },
    {
      title: "Nodejs01 基础API与CLI",
      content: `
              异步I/O Stream Buffer Http
              手写一个CLI工具
              `,
      catg: "nodejs"
    },
    {
      title: "Nodejs02 Koa源码",
      content: `
        context上下文
        中间件机制
        router中间件
        静态服务中间件
      `,
      catg: "nodejs"
    },
    {
      title: "Nodejs03 网络编程",
      content: `
                socket套接字编程
                http协议 跨域 反向代理 爬虫 反向代理 bodyparser
                上传原理
                websocket
      `,
      catg: "nodejs"
    },
    {
      title: "Nodejs04 Mysql",
      content: `
                mysql 
                sequelize
                电商sequlize实战
                `,
      catg: "nodejs"
    },
    {
      title: "Nodejs05 Mongoose",
      content: `
                mongo native
                mongoose
                零编码Restful
              `,
      catg: "nodejs"
    },
    {
      title: "Nodejs06 鉴权",
      content: `
                cookie-session
                token jwt原理解析
                扩展Oauth2 与 SSO单点登录
      `,
      catg: "nodejs"
    },
    {
      title: "Nodejs07 eggjs原理解析",
      content: `
                实现一个MVC框架
                约定优于配置 控制器层 服务层 实体层
                定时器 中间件
      `,
      catg: "nodejs"
    },
    {
      title: "Nodejs08 eggjs最佳实践",
      content: `
                swager 接口文档
                plugin
                restful服务
                表单校验
                jwt鉴权
                生命周期函数 初始化数据
                上传upload
      `,
      catg: "nodejs"
    },
    {
      title: "Nodejs09 手写TS装饰器",
      content: `
                装饰器与AOP
                路由装饰器
                校验装饰器
                模型装饰器
      `,
      catg: "nodejs"
    },
    {
      title: "Nodejs10 部署_Docker_自动化部署",
      content: `
                  部署 cluster模块、PM2、静态服务、反向代理
                  docker基础
                  github webhooks 自动化部署
                  `,
      catg: "nodejs"
    },
    {
      title: "项目课",
      content: `
        项目先导课
        整体架构分析
                  `,
      catg: "project"
    },
    {
      title: "微信公众号开发",
      content: `
                ngrok
                消息接口
                服务器端接口调用
      `,
      catg: "wechat"
    },
    {
      title: "前端安全 常见攻击手段攻防演练",
      content: `
                XSS、CSRF、点击劫持、SQL注入、OS注入、DDOS简介
      `,
      catg: "safe"
    },
    {
      title: "工程化01",
      content: "工程化01",
      catg: "webpack"
    },
    {
      title: "工程化02 进阶",
      content: "工程化02",
      catg: "webpack"
    },
    {
      title: "工程化03",
      content: "工程化03",
      catg: "webpack"
    },
    {
      title: "工程化04",
      content: "工程化03",
      catg: "webpack"
    },
    {
      title: "休息",
      content: `
         休息
             `,

      catg: "rest"
    },
    {
      title: "工程化05",
      content: "webpack源码",
      catg: "webpack"
    },

    // {
    //   title: '微信公众号开发02',
    //   content: '微信公众号开发02',
    //   catg: 'wechat'
    // },
    // {
    //   title: '微信公众号开发03',
    //   content: '微信公众号开发03',
    //   catg: 'wechat'
    // },
    // {
    //   title: '微信公众号开发04',
    //   content: '微信公众号开发04',
    //   catg: 'wechat'
    // },

    // {
    //   title: '项目01',
    //   content: '项目01',
    //   catg: 'test'
    // },
    // {
    //   title: '项目02',
    //   content: '项目01',
    //   catg: 'test'
    // },
    // {
    //   title: '项目03',
    //   content: '项目01',
    //   catg: 'test'
    // },
    // {
    //   title: '项目04',
    //   content: '项目01',
    //   catg: 'test'
    // },
    // {
    //   title: '前端安全02',
    //   content: '前端安全02',
    //   catg: 'safe'
    // },
    {
      title: "React-native01",
      content: "React-native01",
      catg: "rn"
    },
    {
      title: "React-native02",
      content: "React-native02",
      catg: "rn"
    },
    {
      title: "React-native03",
      content: "React-native03",
      catg: "rn"
    },
    {
      title: "React-native04",
      content: "React-native04",
      catg: "rn"
    },
    {
      title: "flutter01",
      content: "flutter实战",
      catg: "rn",
    },
    {
      title: "flutter02",
      content: "flutter实战",
      catg: "rn",
    },
    {
      title: "flutter03",
      content: "flutter实战",
      catg: "rn",
    },
    {
      title: "flutter04",
      content: "flutter实战",
      catg: "rn",
    },
    {
      title: "小程序01",
      content: "小程序入门",
      catg: "mp"
    },
    {
      title: "小程序02",
      content: "小程序入门",
      catg: "mp"
    },
    {
      title: "性能优化",
      content: "性能优化",
      catg: "perf"
    },

    {
      title: "前端自动化测试01",
      content: "前端自动化测试01",
      catg: "test"
    },

    {
      title: "面试",
      content: "面试",
      catg: "interview"
    },
    {
      title: "结课",
      content: "结课",
      catg: "end"
    }
  ]
};
const catgTeachers = {};
Object.entries(obj.teachers).forEach(val => {
  const [name, catg] = val;
  catg.split(",").forEach(v => {
    catgTeachers[v] = name;
  });
});
obj.details.map(v => {
  v.teacher = catgTeachers[v.catg];
  return v;
});
console.log("19", obj.details.length);

export default obj;
